Vaultwarden – это легковесная реализация сервера Bitwarden на языке Rust, идеально подходящая для домашнего сервера или VPS. Использование Caddy в качестве реверс-прокси позволяет автоматически получить и продлевать SSL-сертификаты, обеспечивая безопасный доступ к вашим паролям.
Официальный репозиторий проекта: Vaultwarden на GitHub
Данное руководство охватывает весь цикл работы с сервисом: от чистой установки на Debian до настройки автоматического ежедневного резервного копирования в облако и методов быстрого восстановления данных.
Установка Vaultwarden и Caddy через Docker-Compose
Устанавливаем Docker с помощью официального скрипта:
curl https://get.docker.com -o install.sh && sh install.sh
Добавляем в автозагрузку наш Docker:
systemctl enable docker.service
Проверяем что все установилось:
docker version
docker compose version
Создаем нужные директории и сам docker-compose.yml:
mkdir -p /app/vaultwarden
cd /app/vaultwarden
nano docker-compose.yml
Заполняем его следующим содержимым:
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
WEBSOCKET_ENABLED: "true"
SIGNUPS_ALLOWED: "true" #Меняем на false для закрытия регистрации
volumes:
- ./data:/data
caddy:
image: caddy:2
container_name: caddy
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./caddy-config:/config
- ./caddy-data:/data
environment:
DOMAIN: "https://ВАШ_ДОМЕН.RU"
EMAIL: "ВАША_ПОЧТА@gmail.com"
LOG_FILE: "/data/access.log"
Создаем и наполняем содержимым наш Caddyfile:
nano Caddyfile
{$DOMAIN}:443 {
log {
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
tls {$EMAIL}
encode gzip
header {
Strict-Transport-Security "max-age=31536000;"
X-XSS-Protection "1; mode=block"
X-Frame-Options "DENY"
X-Robots-Tag "none"
-Server
}
reverse_proxy /notifications/hub vaultwarden:3012
reverse_proxy vaultwarden:80 {
header_up X-Real-IP {remote_host}
}
}
Запускаем наш Docker-Compose.yml файл и завершаем установку:
docker compose up -d
Обновление Vaultwarden
Быстрое обновление (одной строкой)
cd /app/vaultwarden && docker compose down && docker pull vaultwarden/server:latest && docker compose up -d && sleep 5 && docker exec vaultwarden /vaultwarden --version
Пошаговое обновление
Перейти в папку Vaultwarden:
cd /app/vaultwarden
Остановить текущие контейнеры:
docker compose down
Скачать последнюю версию образа Vaultwarden:
docker pull vaultwarden/server:latest
Перезапустить контейнеры с новым образом:
docker compose up -d
Автоматическое обновление через Watchtower
Чтобы не проверять выход новых версий вручную, мы используем Watchtower. Это сервисный контейнер, который автоматически сканирует установленные образы, скачивает их и перезапускает контейнеры на свежих версиях, сохраняя все настройки.
Настройка автоматического обновления
Если вы хотите перенастроить или обновить сам Watchtower, сначала удалите текущий контейнер:
docker rm -f watchtower
Затем выполните команду для запуска Watchtower в универсальном режиме. Он будет проверять обновления для всех контейнеров (Vaultwarden и Caddy) раз в сутки:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKER_API_VERSION=1.41 \
containrrr/watchtower \
--cleanup \
--interval 86400
Разбор флагов:
--cleanup– обязательный флаг, который удаляет старые образы после обновления. Без него диск сервера быстро забьётся ненужным мусором.-e DOCKER_API_VERSION=1.41– обеспечивает совместимость с API Docker в современных дистрибутивах (Debian Trixie и др.).--interval 86400– задаёт интервал проверки в секундах (ровно 24 часа).
Проверка работы
Вы всегда можете посмотреть, что делал Watchtower и не нашёл ли он обновлений, с помощью логов:
docker logs watchtower
Запуск обновления вручную (здесь и сейчас)
Если вы хотите принудительно обновить все контейнеры прямо сейчас, не дожидаясь плановой проверки, используйте разовый запуск:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKER_API_VERSION=1.41 \
containrrr/watchtower \
--cleanup \
--run-once
Этот способ гораздо надёжнее и чище, чем ручное пересоздание контейнеров.
Проверка версии Vaultwarden
1. Через логи Docker
docker logs vaultwarden 2>&1 | grep -i "version"
(Замените vaultwarden на имя своего контейнера, если оно другое). В самом начале логов при запуске он всегда пишет свою версию.
2. Через консоль внутри контейнера
docker exec -it vaultwarden /vaultwarden --version
Это выведет точную версию исполняемого файла.
3. Через Docker Inspect
Если вы хотите узнать версию образа (тег):
docker inspect vaultwarden | grep -i "version"
Настройка резервного копирования (Backup) в Яндекс.Диск
Установка и настройка rclone
Для синхронизации с облаком используем официальный скрипт установки rclone (всегда ставит актуальную версию):
curl https://rclone.org/install.sh | sudo bash
Проверяем, что установилась актуальная версия:
rclone version
Запускаем конфигурацию:
rclone config
Ход настройки:
n) New remote– вводим имяyandex.Storage– ищем и выбираемwebdav.url– вводим:https://webdav.yandex.ruvendor– выбираемyandex(обычно пункт 5). Илиother(обычно пункт 8).user– вводим твой логин (почту) Яндекса.password– выбираемy) Yes, type in my own password.- Внимание: Сюда вставляем не основной пароль, а Пароль приложения (16 букв), который мы создали в Яндекс ID.
bearer_token– оставляем пустым (просто Enter).Edit advanced config– жмём n (нет).Keep this "yandex" remote?– жмём y (да).
Подготовка Яндекс.Диска
Перед настройкой обязательно создайте Пароль приложения в Яндекс ID:
- Зайдите в Яндекс ID -> Пароли приложений
- Нажмите «Создать» -> выбирайте «Файлы».
- Назовите его
rclone-serverи сохраните код. Именно его нужно вводить в пунктеpasswordвыше.
Создание скрипта для бэкапа
Создаём файл:
nano /root/backup.sh
Вставляем:
#!/bin/bash
# Путь к данным Vaultwarden
SOURCE_DIR="/app/vaultwarden/data"
# Имя файла с датой и временем
FILENAME="vaultwarden-backup-$(date +%Y-%m-%d_%H-%M).tar.gz"
# 1. Создаём архив всех данных (база, ключи, иконки)
# Ключ -C переходит в папку данных, чтобы в архиве не было лишних вложенных папок
tar -czf /tmp/$FILENAME -C $SOURCE_DIR .
# 2. Копируем на Яндекс.Диск. Папка VaultBackups создастся сама.
rclone copy /tmp/$FILENAME yandex:VaultBackups
# 3. Чистим за собой временный файл в /tmp
rm /tmp/$FILENAME
# 4. Удаляем бэкапы в облаке старше 30 дней
rclone delete --min-age 30d yandex:VaultBackups
Даём права на запуск:
chmod +x /root/backup.sh
Автоматизация (Cron)
Заставляем сервер делать бэкап автоматически каждый день в 03:00 ночи:
crontab -e
Добавляем в самый конец:
0 3 * * * /root/backup.sh
Проверка
Для ручного запуска и проверки используйте:
/root/backup.sh
rclone ls yandex:VaultBackups
Восстановление данных (Restore)
Способ 1: Через консоль (с Яндекс.Диска)
Этот метод самый быстрый, если сервер работает и rclone настроен.
Остановите контейнеры:
cd /app/vaultwarden && docker compose down
Посмотрите список доступных бэкапов:
rclone ls yandex:VaultBackups
Скачайте нужный архив (замените имя файла на своё):
rclone copy yandex:VaultBackups/vaultwarden-backup-ИМЯ_ФАЙЛА.tar.gz /tmp/
Очистите текущую папку данных и распакуйте бэкап:
rm -rf /app/vaultwarden/data/*
tar -xzf /tmp/vaultwarden-backup-*.tar.gz -C /app/vaultwarden/data/
Запустите сервис:
docker compose up -d
Способ 2: Через SFTP (MobaXterm / Termius)
Если архив бэкапа лежит у вас на компьютере.
Подключитесь к серверу через MobaXterm или Termius.
Остановите контейнеры в консоли:
cd /app/vaultwarden && docker compose down
Загрузите файл: Просто перетащите ваш архив .tar.gz с компьютера в папку /tmp на сервере через графический интерфейс SFTP.
Распакуйте данные (подставив имя своего файла):
rm -rf /app/vaultwarden/data/*
tar -xzf /tmp/имя_вашего_файла.tar.gz -C /app/vaultwarden/data/
[!WARNING] Важно
Не распаковывайте архив на Windows перед загрузкой, чтобы не нарушить права доступа Linux.
Проверьте права (на всякий случай):
chown -R root:root /app/vaultwarden/data
Запустите сервис:
docker compose up -d